//package com.opengms.HydroModelsIntegration.service;
//
//import com.ogms.modelservice.Data;
//import com.ogms.modelservice.customer.RunModelService;
//import com.opengms.HydroModelsIntegration.Config.ModelServiceAddressConfig;
//import com.opengms.HydroModelsIntegration.Dao.*;
//import com.opengms.HydroModelsIntegration.Domain.InpData;
//import net.sf.json.JSONArray;
//import net.sf.json.JSONObject;
//import org.apache.commons.io.FileUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.File;
//import java.io.IOException;
//import java.net.URL;
//import java.util.List;
//
///**
// * @Author: David.Xiao
// * @Date: 2019/1/3 23:26
// * @Description:
// */
//@Service
//public class DataService {
//
//    @Autowired
//    ModelServiceAddressConfig modelServiceAddressConfig;
//
//    private String modelServiceGuid;
//    public void setModelServiceGuid(String modelServiceGuid) {
//        this.modelServiceGuid = modelServiceGuid;
//    }
//
//    private String modelServiceUrl;
//
//
//    private static final String basePath = DataService.class.getResource("/").getPath()+"\\SwmmData";
//
//    private String rawInputFile;
//
//
//    private  String modifiedInputFile;
//
//
//    private  String outputDataFile;
//
//
//    private String configFile;
//
//
//    private String rawInputDataFullPath;
//
//
//    private String modifiedInputDataFullPath;
//
//
//    private List<String> outputUrlList;
//
//
//    private String outputDataFullPath;
//
//
//    private String inpJsonStr;
//
//
//    private InpData inpData;
//
//
//    private final String modelServiceAddressConfigPath = this.getClass().getResource("/").getPath()+"\\ModelService.properties";
//
//    private final String migratoryModelServiceAddressConfigPath = this.getClass().getResource("/").getPath()+"\\MigratoryModelService.properties";
//
//    public void initSwmmFilePath(String userId)
//    {
//        String path = this.basePath + "\\" + userId;
//        this.rawInputFile = path + "\\RawInput";
//        File rawInputFile=new File(this.rawInputFile);
//        if (!rawInputFile.exists())
//        {
//            rawInputFile.mkdirs();
//        }
//
//        this.modifiedInputFile = path + "\\ModifiedInput";
//        File modifiedInput=new File(this.modifiedInputFile);
//        if (!modifiedInput.exists())
//        {
//            modifiedInput.mkdirs();
//        }
//
//        this.outputDataFile = path + "\\Output";
//        File output = new File(this.outputDataFile);
//        if (!output.exists())
//        {
//            output.mkdirs();
//        }
//
//        this.configFile = path + "\\config";
//        File config = new File(this.configFile);
//        if (!config.exists())
//        {
//            config.mkdirs();
//        }
//        try {
//            FileUtils.copyFileToDirectory(new File(modelServiceAddressConfigPath),new File(configFile));
//            FileUtils.copyFileToDirectory(new File(migratoryModelServiceAddressConfigPath),new File(configFile));
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//
//    }
//
//    public String openFile(MultipartFile uploadFile,String userId)
//    {
//         this.rawInputDataFullPath = this.rawInputFile + "\\"+ uploadFile.getOriginalFilename();
//         File localFile=new File(this.rawInputDataFullPath);
//         try {
//             uploadFile.transferTo(localFile);
//         } catch (IOException e) {
//             e.printStackTrace();
//         }
//         return uploadFile.getOriginalFilename();
//     }
//
//     public String parseInputData(String fileName)
//     {
//         //获得前台发来的文件名，判断后缀，如果是inp，直接解析；如果是xml，转为inp再解析
//         String inpFileName = this.rawInputDataFullPath;
//         DataConverter dataConverter = new DataConverter();
//         String convertedInputDataFullPath = this.rawInputFile + "\\convertedInp.inp";
//         if(fileName.endsWith(".xml"))
//         {
//             dataConverter.udx2Inp(this.rawInputDataFullPath,convertedInputDataFullPath);
//             inpFileName = convertedInputDataFullPath;
//         }
//
//         //解析inp数据
//         InpParser inpParser = new InpParser();
//         this.inpData = inpParser.parseInp(inpFileName);
//
//         //转为json
//         JSONObject jsonObject=JSONObject.fromObject(this.inpData);
//
//         //获取geojson
//         JSONObject geojsonObject=inpParser.getGeojsonFromInp();
//
//         JSONObject object=new JSONObject();
//         object.put("json",jsonObject);
//         object.put("geojson",geojsonObject);
//         System.out.println(geojsonObject.toString());
//         this.inpJsonStr = object.toString();
//         return this.inpJsonStr;
//     }
//
//     public JSONArray runModel(JSONObject inpJsonObj,String userId)
//     {
//         List<String> urls = modelServiceAddressConfig.getUrls();
//         List<String> guids = modelServiceAddressConfig.getGuids();
//         for (int index = 0;index<guids.size();index++)
//         {
//             if (guids.get(index).equals(this.modelServiceGuid))
//             {
//                 this.modelServiceUrl = urls.get(index);
//                 this.modelServiceGuid = guids.get(index);
//             }
//         }
//         String ip;
//         String port;
//         String[] strs = modelServiceUrl.split("://|:");
//         ip = strs[0];
//         port = strs[1];
//
//         Json2Inp json2Inp =new Json2Inp();
//         InpData inpData= json2Inp.json2InpData(inpJsonObj);
//
//         //写入inp文件
//         this.modifiedInputDataFullPath = new File(this.modifiedInputFile + "\\modifiedInput.inp").toString();
//
//         InpWriter inpWriter =new InpWriter();
//         inpWriter.inpData=inpData;
//         inpWriter.writeInp(this.modifiedInputDataFullPath);
//
//         //跑模型
//         RunModelService runModelService=new RunModelService(ip,port);
//         Data pData=runModelService.uploadData(this.modifiedInputDataFullPath);
//         String recordId=runModelService.getRecordId(pData,this.modelServiceGuid);
//         List<Data> outputDataList=runModelService.runModel(recordId);
//         //获取输出数据的URL
//         this.outputUrlList = runModelService.getOutputUrls(outputDataList);
//         JSONArray urlJsonArray = JSONArray.fromObject(this.outputUrlList);
//
//         return urlJsonArray;
//     }
//
//     public String downloadOutput2local()
//     {
//
//         for (String urlName:this.outputUrlList) {
//             try {
//
//                 UrlHelper urlTools =new UrlHelper(urlName);
////                 folderName = urlName.substring(urlName.lastIndexOf("/")+1);
////                 this.setOutputDataPath(new File(getOutputDataFile() + "\\" + rptFileName).getPath());
//                 URL url = new URL(urlName);
//
//                 String fileName =  urlTools.getFileName();
//                 if(fileName.endsWith("rpt"))
//                 {
//                     this.outputDataFullPath = this.outputDataFile + "\\" + fileName;
//                     File file = new File(this.outputDataFullPath);
//                     if(!FileHelper.pathExists(new File(this.outputDataFile)))
//                     {
//                         return null;
//                     }
//                     FileUtils.copyURLToFile(url,file);
//                 }
//
//             } catch (IOException e) {
//                 e.printStackTrace();
//             }
//         }
//         return this.outputDataFullPath;
//     }
//
//
//
//     public String parseOutputData()
//     {
//
//         DataConverter dataConverter = new DataConverter();
//
//         String rptFileFullPath = downloadOutput2local();
//         String udxFileFullPath = this.outputDataFile + "\\SwmmModel-rptData.xml";
//         dataConverter.rpt2Udx(rptFileFullPath,udxFileFullPath);
//
//         return FileHelper.readXml(new File(udxFileFullPath));
//     }
//
//     public JSONArray makeTree(JSONArray jsonArray)
//     {
//         TreeDataMaker treeDataMaker = new TreeDataMaker(this.inpData,jsonArray);
//         return treeDataMaker.makeTreeData(jsonArray);
//     }
//
//     public String readOutputSchema()
//     {
//         return FileHelper.readXml(new File(this.getClass().getResource("/").getPath()+"\\OutputSchema.xml"));
//     }
//
//     public String testReadUdxData()
//     {
//         String str = parseOutputData();
////         String str = FileHelper.readXml(new File(this.getClass().getResource("/").getPath()+"\\1c2133d1-48e3-498f-bc69-49fea34cf06b.xml"));
//         return str;
//     }
//
//    public String readInputSchema()
//    {
//        return FileHelper.readXml(new File(this.getClass().getResource("/").getPath()+"\\InputSchema.xml"));
//    }
//
//
//
//
//
//
//
//}
